#include "modulewidget.h"
#include "sconst.h"
#include "modulelistmodel.h"
#include "types.h"
#include <QList>

ModuleWidget::ModuleWidget(QWidget *parent) : QWidget(parent)
{
  ModuleReleaseLayout = 0;
  module              = 0;
  modulename          = 0;
  version             = 0;
  pushButton          = 0;

}

ModuleWidget::~ModuleWidget()
{
}

void ModuleWidget::buildWidget(std::list<Module> m)
{
  QSizePolicy                 sizePolicy(QSizePolicy::Expanding, QSizePolicy::Fixed);
  std::list<Module>::iterator module_it;
//  std::map<std::string, Module>::iterator module_list_it;
  QIcon                       icon;


//  module_list = m;
  module_list.clear();
  for ( module_it=m.begin() ; module_it != m.end(); module_it++ )
  {
    Module   m  = ((Module)(*module_it));
    module_list[m.getModuleName()] = m;
  }

  ModuleReleaseLayout = new QHBoxLayout(this);
  ModuleReleaseLayout->setContentsMargins(0, 0, 0, 0);

  if(module == 0) {
    module = new QLabel(SC_MODULE, this);
    ModuleReleaseLayout->addWidget(module);
  }

  if(modulename == 0) {
    modulename = new QComboBox(this);

    for ( module_it=m.begin() ; module_it != m.end(); module_it++ )
    {
      Module   m  = ((Module)(*module_it));
      modulename->addItem(m.data());
    }

    connect(modulename, SIGNAL(currentIndexChanged(QString)), this, SLOT(moduleNameIndexChanged(QString)));

    sizePolicy.setHorizontalStretch(0);
    sizePolicy.setVerticalStretch(0);
    sizePolicy.setHeightForWidth(modulename->sizePolicy().hasHeightForWidth());
    modulename->setSizePolicy(sizePolicy);
    ModuleReleaseLayout->addWidget(modulename);
  } else {
     updateModuleListView(m);
  }

  if(version == 0) {
    version = new QComboBox(this);
    for(int icount = 0; icount < 20; icount ++)
      version->addItem(QString::number(icount));

    connect(version, SIGNAL(currentIndexChanged(QString)), this, SLOT(moduleVersionIndexChanged(QString)));
    ModuleReleaseLayout->addWidget(version);
  }

  if(pushButton == 0) {
    pushButton = new QPushButton(this);
    icon.addFile(SC_IMG_REFRESH, QSize(), QIcon::Normal, QIcon::Off);
    pushButton->setIcon(icon);
    connect( pushButton, SIGNAL(clicked()), SLOT(moduleRefreshClicked()) );
    ModuleReleaseLayout->addWidget(pushButton);
  }
}

void ModuleWidget::updateModuleListView(std::list<Module> ml)
{
  std::list<Module>::iterator module_it;

  module_list.clear();
  for ( module_it=ml.begin() ; module_it != ml.end(); module_it++ )
  {
    Module   m  = ((Module)(*module_it));
    module_list[m.getModuleName()] = m;
  }

//  module_list = ml;
  modulename->clear();
  for ( module_it=ml.begin() ; module_it != ml.end(); module_it++ )
  {
    Module   m  = ((Module)(*module_it));
    modulename->addItem(((Module)(*module_it)).data());
  }
}

void ModuleWidget::moduleNameIndexChanged ( const QString & text )
{
  UNUSED_ARGUMENT(text);
}

void ModuleWidget::moduleVersionIndexChanged ( const QString & text )
{
  UNUSED_ARGUMENT(text);
}

void ModuleWidget::moduleRefreshClicked()
{
  Module m;
#if 0
  m.setModuleName(modulename->currentText().toStdString());
  if(m.getModuleName() == SC_ALL)
   m.setModuleID(ALL_MODULE_ID);
  else
#endif
  m = module_list[modulename->currentText().toStdString()];

  m.setModuleVersion(version->currentText().toInt());
  emit moduleWidgetUpdated(m);
}
